package com.jisheng.xb.common;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



public class CallHttpUtil {
	
	public static final Logger logger = LoggerFactory.getLogger(CallHttpUtil.class);
	//http://hq.sinajs.cn/list=sh601003,sh601001  数据地址
	public static String DATA_PRE_URL = "http://hq.sinajs.cn/list=";
	//http://image.sinajs.cn/newchart/daily/n/sh601006.gif k线图
	public static String IMAGE_PRE_URL = "http://image.sinajs.cn/newchart/daily/n/";
	//http://image.sinajs.cn/newchart/min/n/sh000001.gif 分时均线查询
	public static String IMAGE_PRE_TIME_URL = "http://image.sinajs.cn/newchart/min/n/";
	//http://image.sinajs.cn/newchart/daily/n/sh000001.gif 日K线查询
	public static String IMAGE_PRE_DAYILY_URL = "http://image.sinajs.cn/newchart/daily/n/";
	//http://image.sinajs.cn/newchart/weekly/n/sz002230.gif 周k线查询
	public static String IMAGE_PRE_WEEKLY_URL = "http://image.sinajs.cn/newchart/weekly/n/";
	//http://image.sinajs.cn/newchart/monthly/n/sz002230.gif 周k线查询
	public static String IMAGE_PRE_MONTHLY_URL = "http://image.sinajs.cn/newchart/monthly/n/";
	
	/** 
     * 使用Get方式获取数据 
     *  
     * @param url 
     *            URL包括参数，http://HOST/XX?XX=XX&XXX=XXX 
     * @param charset 
     * @return 
     */  
    public static String sendGet(String url, String charset) { 
    	logger.info("调用GET 方法请求  URL:"+url+" ----编码---"+charset+" ---begin");
    	if(StringUtil.isNullOrEmpty(url)){
    		logger.error("调用GET 方法请求  参数错误 ！ URL :"+url);
    		return null;
    	}
    	if(StringUtil.isNullOrEmpty(charset))charset="GBK";
        String result = "";  
        BufferedReader in = null;  
        try {  
            URL realUrl = new URL(url);  
            // 打开和URL之间的连接  
            URLConnection connection = realUrl.openConnection();  
            // 设置通用的请求属性  
            connection.setRequestProperty("accept", "*/*");  
            connection.setRequestProperty("connection", "Keep-Alive");  
            connection.setRequestProperty("user-agent",  
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");  
            // 建立实际的连接  
            connection.connect();  
            // 定义 BufferedReader输入流来读取URL的响应  
            in = new BufferedReader(new InputStreamReader(  
                    connection.getInputStream(), charset));  
            String line;  
            while ((line = in.readLine()) != null) {  
                result += line;  
            }  
        } catch (Exception e) {  
            logger.error("发送GET请求出现异常！" + e);  
            e.printStackTrace();  
        }  
        // 使用finally块来关闭输入流  
        finally {  
            try {  
                if (in != null) {  
                    in.close();  
                }  
            } catch (Exception e2) {  
                e2.printStackTrace();  
            }  
        }
        logger.info("调用GET 方法请求  URL:"+url+" ----编码---"+charset+",result:"+result+"  ---end");
        return result;  
    }  
  
    /**  
     * POST请求，字符串形式数据  
     * @param url 请求地址  
     * @param param 请求数据  
     * @param charset 编码方式  
     */  
    public static String sendPostUrl(String url, String param, String charset) {  
    	logger.info("调用POST 方法请求  URL:"+url+" ----编码---"+charset+",param:"+param+" ---begin");
    	if(StringUtil.isNullOrEmpty(url)){
    		logger.error("调用POST 方法请求  参数错误 ！ URL :"+url);
    		return null;
    	}
    	if(StringUtil.isNullOrEmpty(charset))charset="GBK";
        PrintWriter out = null;  
        BufferedReader in = null;  
        String result = "";  
        try {  
            URL realUrl = new URL(url);  
            // 打开和URL之间的连接  
            URLConnection conn = realUrl.openConnection();  
            // 设置通用的请求属性  
            conn.setRequestProperty("accept", "*/*");  
            conn.setRequestProperty("connection", "Keep-Alive");  
            conn.setRequestProperty("user-agent",  
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");  
            // 发送POST请求必须设置如下两行  
            conn.setDoOutput(true);  
            conn.setDoInput(true);  
            // 获取URLConnection对象对应的输出流  
            out = new PrintWriter(conn.getOutputStream());  
            // 发送请求参数  
            out.print(param);  
            // flush输出流的缓冲  
            out.flush();  
            // 定义BufferedReader输入流来读取URL的响应  
            in = new BufferedReader(new InputStreamReader(  
                    conn.getInputStream(), charset));  
            String line;  
            while ((line = in.readLine()) != null) {  
                result += line;  
            }  
        } catch (Exception e) {  
            System.out.println("发送 POST 请求出现异常！" + e);  
            e.printStackTrace();  
        }  
        // 使用finally块来关闭输出流、输入流  
        finally {  
            try {  
                if (out != null) {  
                    out.close();  
                }  
                if (in != null) {  
                    in.close();  
                }  
            } catch (IOException ex) {  
                ex.printStackTrace();  
            }  
        } 
        logger.info("调用POST 方法请求  URL:"+url+" ----编码---"+charset+",result:"+result+"  ---end");
        return result;  
    }  
    /**  
     * POST请求，Map形式数据  
     * @param url 请求地址  
     * @param param 请求数据  
     * @param charset 编码方式  
     */  
    public static String sendPost(String url, Map<String, String> param,  
            String charset) {  
    	logger.info("调用POST 方法请求  URL:"+url+" ----编码---"+charset+" ---begin");
    	if(StringUtil.isNullOrEmpty(url)){
    		logger.error("调用POST 方法请求  参数错误 ！ URL :"+url);
    		return null;
    	}
    	if(StringUtil.isNullOrEmpty(charset))charset="GBK";
        StringBuffer buffer = new StringBuffer();  
        if (param != null && !param.isEmpty()) {  
            for (Map.Entry<String, String> entry : param.entrySet()) {  
                buffer.append(entry.getKey()).append("=")  
                        .append(URLEncoder.encode(entry.getValue()))  
                        .append("&");  
  
            }  
        }  
        buffer.deleteCharAt(buffer.length() - 1);  
  
        PrintWriter out = null;  
        BufferedReader in = null;  
        String result = "";  
        try {  
            URL realUrl = new URL(url);  
            // 打开和URL之间的连接  
            URLConnection conn = realUrl.openConnection();  
            // 设置通用的请求属性  
            conn.setRequestProperty("accept", "*/*");  
            conn.setRequestProperty("connection", "Keep-Alive");  
            conn.setRequestProperty("user-agent",  
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");  
            // 发送POST请求必须设置如下两行  
            conn.setDoOutput(true);  
            conn.setDoInput(true);  
            // 获取URLConnection对象对应的输出流  
            out = new PrintWriter(conn.getOutputStream());  
            // 发送请求参数  
            out.print(buffer);  
            // flush输出流的缓冲  
            out.flush();  
            // 定义BufferedReader输入流来读取URL的响应  
            in = new BufferedReader(new InputStreamReader(  
                    conn.getInputStream(), charset));  
            String line;  
            while ((line = in.readLine()) != null) {  
                result += line;  
            }  
        } catch (Exception e) {  
            System.out.println("发送 POST 请求出现异常！" + e);  
            e.printStackTrace();  
        }  
        // 使用finally块来关闭输出流、输入流  
        finally {  
            try {  
                if (out != null) {  
                    out.close();  
                }  
                if (in != null) {  
                    in.close();  
                }  
            } catch (IOException ex) {  
                ex.printStackTrace();  
            }  
        } 
        logger.info("调用POST 方法请求  URL:"+url+" ----编码---"+charset+",result:"+result+"  ---end");
        return result;  
    }
    
    public static void main(String[] args){
    	String str = "requestJson={\"service\":\"002030\",\"mobile\":\"" +"13260170809\"}";
    	//String str2 = "requestJson={\"service\":\"000002\",\"parentCode\":\"" +"0\"}";
    	//String recharge = "requestJson={\"service\":\"003042\",\"clientType\":\"" +"1\",\"amount\":\"" +"0.1\",\"channelType\":\"" +"0.1\",\"RegisterId\":\"" +"UB201508061922480000000005178544\",\"mobile\":\"" +"18500195055\"}";
    	String url = "http://localhost:8080/CJFacade/hjcf/handlerRequestJson";
    	//System.out.println(CallHttpUtil.sendPostUrl(url, recharge, "UTF-8"));
    	/*String url = "http://hq.sinajs.cn/list=sh601006,sz002705,sz002619";*/
    	System.out.println(CallHttpUtil.sendGet(url, "UTF-8"));
    }
  
}
